/***********************************************************************************
 * 文件名： mcu_timer.c
 * 作者： 黄均铭
 * 版本： 1
 * 说明：
 * 		定时器驱动。
 * 修改记录：
 * 	2024年1月11日: 初版。 黄均铭。
 ***********************************************************************************/
#include "mcu.h"
#include "mcu_timer.h"

// 定时器初始化 TMR0 TMR1 TMR2 TMR3
void Uart1_Init()
{
    // 无校验 1个停止位 8bit数据
    UART1->LCR = UART_LCR_WLS_Msk;
    // 波特率
    UART1->DLR = F_APBCLK * 1000000ul / 16 / UART1_BAUD_RATE;
    // FIFO
    UART1->FCR = 0x01;

#if UART1_RIEN != 0
    // 启动中断
    NVIC_EnableIRQ(UART1_IRQn);
    NVIC_SetPriority(UART1_IRQn, 3);
    UART1->IER = 0x01;
#endif
}

// 查询模式发送1个字节
void Uart1_SendByte(u8 c)
{
#ifdef _UART1_USE_HALF_DUPLEX
    _UART1_PIN_TX_MODE;
#endif
    UART1->THR = c;
    while (!(UART1->LSR & UART_LSR_TEMT_Msk))
        ;
#ifdef _UART1_USE_HALF_DUPLEX
    _UART1_PIN_RX_MODE;
#endif
}

// 发送一串数据
void Uart1_Send(const u8* buff, u16 Length)
{
    while (Length--)
    {
        Uart1_SendByte(*buff);
        buff++;
    }
}

// 设置波特率
void Uart1_SetBaud(u32 baud)
{
    // 波特率
    UART1->DLR = F_HCLK * 1000000ul / 16 / baud;
}
